#pragma once

#include "QSPrerequisites.h"
#include "QSEventType.h"

namespace QS
{	
	class EventArgs
	{
	public:
		virtual ~EventArgs(){}
	};

	class Event
	{
	public:
		Event(EventType::Enum type, const EventArgs* args = 0) : mType(type), mArgs(args){}

		EventType::Enum  getTypeId() const { return mType; }
		String getTypeString() const { return EventType::getString(mType); }
		const EventArgs* getArgs() const{ return mArgs; }
	private:
		EventType::Enum mType;
		const EventArgs* mArgs;
	};

	class EventListener
	{
	public:
		virtual ~EventListener(){}
		virtual void processEvent(const Event&)=0;
	};
}